/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.ihale.satinalmaci;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.ihale.database.Database;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import org.ihale.Ihale;
import org.ihale.Sonuc;
import org.ihale.database.DatabaseEmre;
import org.ihale.database.DatabaseMehmet;
import org.ihale.database.DatabaseYakup;
import org.ihale.tedarikci.Tedarikci;
import org.login.LoginBean;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import org.teklif.Teklif;

/**
 *
 * @author yakup
 */
@ManagedBean(name = "satinalmacibean")
@SessionScoped
public class SatinAlmaciBean implements Serializable {

    private SatinAlmaci satinAlmaci;
    private String satinalmaci_id;
    private SatinAlmaci getirilenSatinAlmaci;
    private SatinAlmaci secilenSatinalmaci;
    private List<SatinAlmaci> satinAlmaciListesi;
    private List<Ihale> listeIhale = new ArrayList<Ihale>();
    private Ihale secilenIhaleToGoruntule = new Ihale();
    private List<Tedarikci> listeTedarikciToIhaleGoruntule = new ArrayList<Tedarikci>();
    private String ihaleBaslamaUyarisi;
    private List<Sonuc> sonuc_teklifleri;
    private List<String> kategoriler;
    private String secilenkategori;
    private List<Teklif> teklifler = new LinkedList<Teklif>();
    private Teklif minTeklif = new Teklif();
    private List<Tedarikci> listeTedarikciToSatinAlmaci = new ArrayList<Tedarikci>();
    private Tedarikci tedarikci = new Tedarikci();
    private String foo;
    private StreamedContent file;
    private boolean belgevarmi;

    public void setFile(StreamedContent file) {
        this.file = file;
    }

    public String getFoo() throws ClassNotFoundException, SQLException {
        Database db = new Database();
        db.connect();
        satinAlmaciListesi = db.listeSatinAlmaci();
        db.disconnect();
        return foo;
    }

    public void setFoo(String foo) {
        this.foo = foo;
    }

    public Tedarikci getTedarikci() {
        return tedarikci;
    }

    public void setTedarikci(Tedarikci tedarikci) {
        this.tedarikci = tedarikci;
    }

    public boolean isBelgevarmi() {
        if (secilenIhaleToGoruntule.getBelge() == null) {
            setBelgevarmi(false);
        } else {
            setBelgevarmi(true);
        }
        return belgevarmi;
    }

    public void setBelgevarmi(boolean belgevarmi) {
        this.belgevarmi = belgevarmi;
    }

    public String getSecilenkategori() {
        return secilenkategori;
    }

    public void setSecilenkategori(String secilenkategori) {
        this.secilenkategori = secilenkategori;
    }

    public List<String> getKategoriler() {
        return kategoriler;
    }

    public void setKategoriler(List<String> kategoriler) {
        this.kategoriler = kategoriler;
    }

    public SatinAlmaciBean() {
        this.satinAlmaci = new SatinAlmaci();
        this.satinAlmaciListesi = new ArrayList<SatinAlmaci>();
        this.secilenSatinalmaci = new SatinAlmaci();



        Database database = new Database();
        try {
            database.connect();
            this.satinAlmaciListesi = database.listeSatinAlmaci();
            database.disconnect();
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Liste veri tabanından alınamadı!"));
            System.out.println(e.toString());
        }

    }

    public void listeIhaleGecmis() throws ClassNotFoundException, SQLException, IOException {
        DatabaseEmre db = new DatabaseEmre();
        db.connect();
        listeIhale = db.listeleIhaleGecmis();

        db.disconnect();
        FacesContext.getCurrentInstance().getExternalContext().redirect("SatinAlmaciIhaleleriGoruntule.xhtml");
    }

    public void listeIhaleSimdiki() throws ClassNotFoundException, SQLException, IOException {
        DatabaseEmre db = new DatabaseEmre();
        db.connect();
        listeIhale = db.listeleIhaleSimdiki();

        db.disconnect();
        FacesContext.getCurrentInstance().getExternalContext().redirect("SatinAlmaciIhaleleriGoruntule.xhtml");
    }

    public void listeIhaleGelecek() throws ClassNotFoundException, SQLException, IOException {
        DatabaseEmre db = new DatabaseEmre();
        db.connect();
        listeIhale = db.listeleIhaleGelecek();

        db.disconnect();
        FacesContext.getCurrentInstance().getExternalContext().redirect("SatinAlmaciIhaleleriGoruntule.xhtml");
    }

    public void satinAlmaciIhaleDetay() {
        DatabaseMehmet dbmehmet = new DatabaseMehmet();
        try {
            dbmehmet.connect();
            kategoriler = dbmehmet.getKategoriler(secilenIhaleToGoruntule.getId());
            kategoriler.add("Toplam İhale Bedeli");
            dbmehmet.disconnect();
        } catch (Exception ex) {
            Logger.getLogger(SatinAlmaciBean.class.getName()).log(Level.SEVERE, null, ex);
        }




        DatabaseEmre db = new DatabaseEmre();
        try {
            db.connect();
            listeTedarikciToIhaleGoruntule = db.listeTedarikciToIhale(secilenIhaleToGoruntule.getId());
            db.disconnect();
            FacesContext.getCurrentInstance().getExternalContext().redirect("SatinAlmaciIhaleDetay.xhtml");
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Kaldırma işlemi başarısız."));
            System.out.println(e.toString());
        }
    }

    public StreamedContent getFile() {
        ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();
        InputStream stream = extContext.getResourceAsStream("/Docs" + File.separator + secilenIhaleToGoruntule.getBelge());
        String[] tmp;
        tmp = secilenIhaleToGoruntule.getBelge().split("\\.");
        // InputStream stream = new FileInputStream(new File("C:"+File.separator+"kpds20110201ingilizcemaster.pdf"));
        System.out.println(tmp[0]);
        System.out.println(tmp[1]);
        file = new DefaultStreamedContent(stream, "application/" + tmp[1], secilenIhaleToGoruntule.getBelge());

        return file;
    }

    public void ekleSatinalmaci() {
        Database database = new Database();
        try {
            database.connect();
            if (database.ekleSatinAlmaci(this.satinAlmaci)) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Satın almacı eklendi."));
                this.satinAlmaciListesi = database.listeSatinAlmaci();
            } else {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Satın almacı eklenemedi."));
            }
            this.satinAlmaci = new SatinAlmaci();
            database.disconnect();

        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Satınalmacı ekleme işlemi başarısız.Veritabanına bağlanılamadı"));
            System.out.println(e.toString());
        }
    }

    public void getirSatinAlmaci() {
        Database database = new Database();

        try {
            database.connect();
            this.getirilenSatinAlmaci = database.getirSatinAlmaci(this.satinalmaci_id);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Satın almacı eklendi."));

            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Satın almacı eklenemedi."));

            database.disconnect();

        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Kaldırma işlemi başarısız."));
            System.out.println(e.toString());
        }

    }

    public void silSatinAlmaci() {
        Database database = new Database();

        try {
            database.connect();
            if (database.silSatinAlmaci(this.secilenSatinalmaci)) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Satın almacı silindi."));
            } else {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Silinemedi!!!."));
            }

            this.satinAlmaciListesi = database.listeSatinAlmaci();

            database.disconnect();
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Silinemedi!!!."));
            System.out.println(e.toString());
        }


    }

    public void guncelleSatinAlmaci() {
        Database database = new Database();

        try {
            database.connect();
            if (database.guncelleSatinAlmaci(this.secilenSatinalmaci)) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Satın almacı güncellendi!"));
            } else {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Satın almacı güncellenemedi!"));
            }

            this.satinAlmaciListesi = database.listeSatinAlmaci();

            database.disconnect();

        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Güncellenemedi!!!."));
            System.out.println(e.toString());
        }

    }

    public void guncellleBilgiMesaji() {
        try {
            DatabaseYakup db = new DatabaseYakup();
            LoginBean loginBean = new LoginBean();

            loginBean = (LoginBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("loginBean");
            db.connect();
            SatinAlmaci st = new SatinAlmaci();
            st = loginBean.getSatinAlmaci();
            String[] tarih = new String[5];


            if (db.getirYakindaIhaleVarMi(st) != null) {
                tarih = db.getirYakindaIhaleVarMi(st).toGMTString().split(" ");
                this.ihaleBaslamaUyarisi = tarih[3] + " zaman sonra ihale başlayacktır";
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "İhaleye kalan süre:" + tarih[3], "deneme"));
            }
            //FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Güncellenemedi!!!."));
            //FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,"İhaleye kalan süre:",tarih[3]  )); 
            db.disconnect();
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(SatinAlmaciBean.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(SatinAlmaciBean.class.getName()).log(Level.SEVERE, null, ex);
        }



    }

    public List<Tedarikci> getListeTedarikciToSatinAlmaci() {
        return listeTedarikciToSatinAlmaci;
    }

    public void setListeTedarikciToSatinAlmaci(List<Tedarikci> listeTedarikciToSatinAlmaci) {
        this.listeTedarikciToSatinAlmaci = listeTedarikciToSatinAlmaci;
    }

    public SatinAlmaci getSecilenSatinalmaci() {
        return secilenSatinalmaci;
    }

    public void setSecilenSatinalmaci(SatinAlmaci secilenSatinalmaci) {
        this.secilenSatinalmaci = secilenSatinalmaci;
    }

    public SatinAlmaci getGetirilenSatinAlmaci() {
        return getirilenSatinAlmaci;
    }

    public void setGetirilenSatinAlmaci(SatinAlmaci getirilenSatinAlmaci) {
        this.getirilenSatinAlmaci = getirilenSatinAlmaci;
    }

    public String getSatinalmaci_id() {
        return satinalmaci_id;
    }

    public void setSatinalmaci_id(String satinalmaci_id) {
        this.satinalmaci_id = satinalmaci_id;
    }

    public List<SatinAlmaci> getSatinAlmaciListesi() {
        return satinAlmaciListesi;
    }

    public SatinAlmaci getSatinAlmaci() {
        return satinAlmaci;
    }

    public void setSatinAlmaci(SatinAlmaci satinAlmaci) {
        this.satinAlmaci = satinAlmaci;
    }

    public SatinAlmaciBean(SatinAlmaci satinAlmaci) {
        this.satinAlmaci = satinAlmaci;

    }

    public List<Ihale> getListeIhale() {
        return listeIhale;
    }

    public void setListeIhale(List<Ihale> listeIhale) {
        this.listeIhale = listeIhale;
    }

    public List<Tedarikci> getListeTedarikciToIhaleGoruntule() {
        return listeTedarikciToIhaleGoruntule;
    }

    public void setListeTedarikciToIhaleGoruntule(List<Tedarikci> listeTedarikciToIhaleGoruntule) {
        this.listeTedarikciToIhaleGoruntule = listeTedarikciToIhaleGoruntule;
    }

    public Ihale getSecilenIhaleToGoruntule() {
        return secilenIhaleToGoruntule;
    }

    public void setSecilenIhaleToGoruntule(Ihale secilenIhaleToGoruntule) {
        this.secilenIhaleToGoruntule = secilenIhaleToGoruntule;
    }

    public String getIhaleBaslamaUyarisi() {
        return ihaleBaslamaUyarisi;
    }

    public void setIhaleBaslamaUyarisi(String ihaleBaslamaUyarisi) {
        this.ihaleBaslamaUyarisi = ihaleBaslamaUyarisi;
    }

    public List<Teklif> getTeklifler() {
        return teklifler;
    }

    public void setTeklifler(List<Teklif> teklifler) {
        this.teklifler = teklifler;
    }

    public Teklif getMinTeklif() {
        return minTeklif;
    }

    public void setMinTeklif(Teklif minTeklif) {
        this.minTeklif = minTeklif;
    }

    public List<Sonuc> getSonuc_teklifleri() throws ClassNotFoundException, SQLException {
        if (secilenkategori == null) {
            sonuc_teklifleri = new ArrayList<Sonuc>();

            DatabaseMehmet dbmehmet = new DatabaseMehmet();
            dbmehmet.connect();
            for (Tedarikci tedarikci : listeTedarikciToIhaleGoruntule) {
                ///*min*/ this.sonuc_teklifleri.add(new Sonuc(tedarikci, dbmehmet.tedarikci_min_teklif(dbmehmet.getir_Max_Tam_Teklif_No(tedarikci.getId()), tedarikci.getId())));
                /*min*/ this.sonuc_teklifleri.add(new Sonuc(tedarikci, dbmehmet.tedarikci_min_teklif(tedarikci.getId(), this.secilenIhaleToGoruntule)));


            }
            dbmehmet.disconnect();
        }
        return sonuc_teklifleri;
    }

    public void kategoriye_gore_grafik_olustur() throws IOException {
        try {
            if ("Toplam İhale Bedeli".equals(secilenkategori)) {
                sonuc_teklifleri = new ArrayList<Sonuc>();

                DatabaseMehmet dbmehmet = new DatabaseMehmet();
                dbmehmet.connect();
                for (Tedarikci tedarikci : listeTedarikciToIhaleGoruntule) {
                    this.sonuc_teklifleri.add(new Sonuc(tedarikci, dbmehmet.tedarikci_min_teklif(tedarikci.getId(), this.secilenIhaleToGoruntule)));

                }
                dbmehmet.disconnect();
            } else {
                sonuc_teklifleri = new ArrayList<Sonuc>();

                DatabaseMehmet dbmehmet = new DatabaseMehmet();
                dbmehmet.connect();
                for (Tedarikci tedarikci : listeTedarikciToIhaleGoruntule) {

                    //select sum(miktari*teklif) from kategori, kategori_kalem,teklif, kalemler where kategori_adi='kategori1' and ihale_no=6 and tedarikci_id=1 and kategori_kalem.kategori_id=idkategori and teklif.kalem_id=kategori_kalem.kalem_id and teklif.kalem_id=kalemler.idkalemler group by teklif_no
                    //bir tedarikçi için bir kategoride verdiği fiyatlar

                    this.sonuc_teklifleri.add(new Sonuc(tedarikci, dbmehmet.get_kategori_bazinda_min_teklif(tedarikci.getId(), secilenIhaleToGoruntule.getId(), secilenkategori)));

                }
                dbmehmet.disconnect();
            }
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(SatinAlmaciBean.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(SatinAlmaciBean.class.getName()).log(Level.SEVERE, null, ex);
        }

        FacesContext.getCurrentInstance().getExternalContext().redirect("SatinAlmaciIhaleDetay.xhtml");

    }

    public void satinAlmaciTeklifleriGoruntule() {
        try {
            DatabaseYakup dby = new DatabaseYakup();
            dby.connect();
            teklifler = dby.getirSonTeklifler(secilenIhaleToGoruntule);
            minTeklif = dby.minTeklifiGetir(secilenIhaleToGoruntule);
            dby.disconnect();

            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("SatinAlmaciTeklifleriGOruntule.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(SatinAlmaciBean.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(SatinAlmaciBean.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(SatinAlmaciBean.class.getName()).log(Level.SEVERE, null, ex);
        }



    }
}
